package com.zh.work.service.platform.virtual.impl;


import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zh.work.dao.platform.virtual.VirtualRateMapper;
import com.zh.work.dao.platform.virtual.VirtualRateTypeMapper;
import com.zh.work.entity.virtual.VirtualRateEntity;
import com.zh.work.entity.virtual.VirtualRateTypeEntity;
import com.zh.work.service.platform.virtual.VirtualRateTypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * code is far away from bug with the animal protecting
 * ┏┓　　　┏┓
 * ┏┛┻━━━┛┻┓
 * ┃　　　　　　　┃
 * ┃　　　━　　　┃
 * ┃　┳┛　┗┳　┃
 * ┃　　　　　　　┃
 * ┃　　　┻　　　┃
 * ┃　　　　　　　┃
 * ┗━┓　　　┏━┛
 * 　　┃　　　┃神兽保佑
 * 　　┃　　　┃代码无BUG！
 * 　　┃　　　┗━━━┓
 * 　　┃　　　　　　　┣┓
 * 　　┃　　　　　　　┏┛
 * 　　┗┓┓┏━┳┓┏┛
 * 　　　┃┫┫　┃┫┫
 * 　　　┗┻┛　┗┻┛
 *
 * @Description: 费率实体类设置业务逻辑实现层
 * @Author: Li.HuiNeng
 * @Create in: 2019/09/11
 * @Version: 1.0.1
 */
@Service
public class VirtualRateTypeServiceImpl extends ServiceImpl<com.zh.work.dao.platform.virtual.VirtualRateTypeMapper, VirtualRateTypeEntity> implements VirtualRateTypeService {

    @Autowired
    private VirtualRateTypeMapper mapper;

    @Autowired
    private VirtualRateMapper vMapper;


    @Override
    public IPage<VirtualRateTypeEntity> selectVirtualRateTypePages(Page<VirtualRateTypeEntity> page, VirtualRateTypeEntity VirtualRateTypeEntity) {
        return this.mapper.selectPage(
                page,
                new QueryWrapper<VirtualRateTypeEntity>().lambda()
        );
    }


    @Override
    public int putAddRateType(VirtualRateTypeEntity virtualRateTypeEntity) {
        // 先添加账户费率信息
        List<VirtualRateEntity> list = JSON.parseArray(virtualRateTypeEntity.getVirtualJson(), VirtualRateEntity.class);
        try {
            list.forEach(f -> {
                    f.setRateCode(virtualRateTypeEntity.getRateCode());
                    vMapper.insert(f);
            });
        } catch (Exception e) {
            e.printStackTrace();
            return -1;
        }
        // 添加账户费率类型
        try {
            mapper.insert(virtualRateTypeEntity);
        } catch (Exception e) {
            e.printStackTrace();
            return -2;
        }
        return 1;
    }

    @Override
    public List<VirtualRateEntity> getVirtualRateInfo(VirtualRateEntity virtualRateEntity) {
        return vMapper.selectList(new LambdaQueryWrapper<VirtualRateEntity>()
        .eq(VirtualRateEntity::getRateCode, virtualRateEntity.getRateCode())
        );
    }

    @Override
    public int putModVirtualRateTypeById(VirtualRateTypeEntity virtualRateTypeEntity) {
        // 先删除指定费率信息
        try {
            vMapper.delete(new LambdaQueryWrapper<VirtualRateEntity>().eq(VirtualRateEntity::getRateCode, virtualRateTypeEntity.getRateCode()));
            // 然后在添加费率信息
            List<VirtualRateEntity> list = JSON.parseArray(virtualRateTypeEntity.getVirtualJson(), VirtualRateEntity.class);
            list.forEach(f -> {
                f.setRateCode(virtualRateTypeEntity.getRateCode());
                vMapper.insert(f);
            });
        } catch (Exception e) {
            e.printStackTrace();
            return  -1;
        }
        // 最后修改费率类别信息
        try {
            mapper.updateById(virtualRateTypeEntity);
        } catch (Exception e) {
            e.printStackTrace();
            return -2;
        }
        return 1;
    }

    @Override
    public List<VirtualRateTypeEntity> getVirtualRateTypeList() {
        return mapper.selectList(new LambdaQueryWrapper<VirtualRateTypeEntity>()
                .select(VirtualRateTypeEntity::getRateCode,VirtualRateTypeEntity::getRateName,VirtualRateTypeEntity::getPayMode)
        );
    }
}
